﻿#define  _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdbool.h>
#include<string.h>
//咳咳，提醒一下自己建的头文件要先引用要有""
//而不是<>(苦笑)
#include"add.h"
//写一个函数，将数组arr[]的内容全变成-1
//void set_arr(int arr[], int x)
//{
//	int i = 0;
//	for (i = 0;i < x; i++)
//	{
//		//直接将arr对应每个元素都赋值为-1就可以了
//		arr[i] = -1;
//	}
//}
//
//void print(int arr[],int sz)
//{
//	int i = 0;
//	for (i = 0;i < sz;i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//
//int main()
//{
//	int arr[3] = { 1,2,3 };
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	set_arr(arr,sz);//函数的调用//将数组内的每个元素都变成-1
//	//数组的传参，实参写数组名就可以了
//	print(arr,sz);
//	//写出来函数就可以调用减少重复的写代码
//	//提高写代码的效率
//	//例:
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 };
//	int sz1 = sizeof(arr1) / sizeof(arr[0]);
//	set_arr(arr1, sz1);
//	print(arr1,sz1);
//}


////写一个函数打印二维数组
////注意二维数组传参的时候需要
////形参要把行和列都传过来
////一维数组需要写成数组的形式
////而不是仅仅只写个数组名
//// 对了二维数组有个注意点在二维数组形参的行可以省略
//// 就和二维数组初始化的时候一样
//two_print(int arr[2][3], int x, int y)
//{
//	int i, j;
//	for (i = 0;i < x;i++)
//	{
//		for (j = 0;j < y;j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//}
//
// 
// 
//int main()
//{
//	int arr[2][3] = { {1,2,2},{2,3,4} };
//	two_print(arr, 2, 3);
//
//	return 0;
//}


//输入年份和月份输出对应天数
//int is_leap(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)))
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//int is_feburary(int m)
//{
//	if (m == 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}
//int main()
//{
//	int year, mouth;
//	scanf("%d %d", &year, &mouth);
//	int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//	is_leap(year);
//	is_feburary(mouth);
//	if (is_leap(year) == 1)
//	{
//		if(is_feburary(mouth))
//		{ 
//		   printf("%d的%d有%d天",year,mouth, arr[mouth - 1]+1);
//		}
//		else
//		{
//			printf("%d的%d有%d天", year,mouth,arr[mouth - 1]);
//		}
//	}
//	else
//	{
//		printf("%d的%d有%d天", year,mouth,arr[mouth - 1]);
//	}
//	return 0;
//}

//鹏哥写法&&用了bool类型
//bool is_leap(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)))
//	{
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//
//int main()
//{
//	int year, mouth;
//	scanf("%d %d", &year, &mouth);
//	int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//	is_leap(year);
//	
//	if ((is_leap(year) == true) &&(mouth == 2))
//	{
//		//鹏哥定义了一个临时变量
//		//d = arr[mouth]
//		//所以当满足闰年并且月份为二月时就会
//		//d+1
//		//还有就是鹏哥定义数组的时候在最前面加上了一个零
//		//这样就解决了数组下标从零开始，与月份不相符的问题
//		//再者就是鹏哥没有给arr范围就是[]里面不给数字
//		//数组会根据数组元素的个数来初始化
//		//这样就避免了溢出的情况
//		   printf("%d的%d有%d天",year,mouth, arr[mouth - 1]+1);
//	}
//	else
//	{
//		printf("%d的%d有%d天", year,mouth,arr[mouth - 1]);
//	}
//	return 0;
//}

//链式访问
//  #include <stdio.h>
//int main()
//{
//	int len = strlen("abcdef");//1.strlen
//	//求⼀个字符串的⻓度
//
//		printf("%d\n", len);//2.
//	//打印⻓度
//
//		return 0;
//}
//前⾯的代码完成动作写了2条语句，
//把如果把strlen的返回值直接作为printf函数的参数呢？这样就是⼀
//个链式访问的例⼦了
//链式访问就是一个函数的返回值作为其他函数的参数
//这样将函数之间联系起来
//来写一个很有意思的代码
//int main()
//{
//	printf("%d", printf("%d", printf("%d", printf("%d", 529))));
//	//预测的话打印529311
//	//检验结果预测正确（嘿嘿），我还是学懂了嘛
//	//printf会根据打印字符个数来返回对应个数
//	printf("\n");
//	//例如
//	printf("%d ", printf("%d ", printf("%d ", printf("%d ", 529))));
//	//预测结果529 4 2 2
//	//欧克再次正确
//	return 0;
//}
//
//
//

//strlen 的返回值类型是size_t
//sizeof的返回值类型也是size_t
// size_t的意思就是无符号整型的意思
//所以写int len = strlen("arr");
//才会出现从size_t转化到int可能会导致数据丢失
//%zu和%zd的使用
//有些资料说
//%zu和%zd没有区别
//但有些资料说
//size_t类型的值用%zu打印
//u是unsigned的意思
//所以以后sizeof和strlen我就用%zu打印了


//
//int main()
//{
//	strlen("How to love");
//	//int len = strlen("How to love");
//	//printf("%d", len);
//	//使用%zu打印时警告就消失了
//
//	printf("%zu", strlen("How to love"));//咳咳，这个也是链式访问
// //将strlen的返回值作为了printf函数的参数
//	return 0;
//}

//函数的声明
//例如
//int main()
//{
//	int a, b;
//	scanf("%d %d", &a, &b);
//	add(a,b);
//	printf("%d", add(a, b));
//	return 0;
//}
//int add(int x,int y)
//{
//	return x + y;
//}

//函数的声明
//就是告诉编译器，一函数的名字，函数的参数，函数返回类型
//函数的声明形参的名字可省略
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	if (is_leap(year))
//	{
//		printf("是闰年\n");
//	}
//	else
//	{
//		printf("不是闰年\n");
//	}
//	return 0;
//}
//
//int is_leap(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)))
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}
//}

//好了多个文件的的使用
//还有一种声明方式用关键字extern
//extern int add(int, int);
//int main()
//{
//	int a, b;
//	scanf("%d %d", &a, &b);
//	add(a,b);
//	printf("%d", add(a, b));
//	return 0;
//}

//作用域和生命周期
//	printf("%d", n);
//

//static关键字
//没有static
//void test(int n )
//{
//	 n = 2;
//   n++;
//	 printf("%d ", n);
//}
//有static
//void test( )
//{
//	//喔喔喔这个函数不用传参
//	//就用static int定义变量就可以了
//	 static int n = 2;
//	 printf("%d ", n);
//	 n++;
//}
//int main()
//{
//	int n = 3;
//	int i = 0;
//	for(i = 0;i < 3;i++)
//	{ 
//	  test();
//	}
//	return 0;
//}

//static还可以把函数和全局变量的外部链接属性变成内部链接属性
//加上了static函数和全局变量都不能使用了
extern int m;
int main()
{
	int a = 0;
	int b = 0;
	printf("%d\n", m);
	scanf("%d %d", &a, &b);
	int re = add(a,b);
	printf("%d\n", re);
	return 0;
}